package com.gobang.service;

import com.gobang.domain.dto.PageRequest;
import com.gobang.domain.dto.auth.LoginRequest;
import com.gobang.domain.dto.auth.RegisterRequest;
import com.gobang.domain.vo.PageData;
import com.gobang.domain.vo.auth.AuthResponse;
import com.gobang.domain.vo.auth.UserInfoVO;
import com.gobang.domain.vo.user.UserListItemVO;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户注册
     *
     * @param request 注册请求
     */
    void register(RegisterRequest request);

    /**
     * 用户登录
     *
     * @param request 登录请求
     * @return 认证响应（包含Token）
     */
    AuthResponse login(LoginRequest request);

    /**
     * 检查用户名是否存在
     *
     * @param username 用户名
     * @return true-存在，false-不存在
     */
    boolean isUsernameExists(String username);

    /**
     * 用户登出
     *
     * @param token 当前请求使用的JWT Token
     */
    void logout(String token);

    /**
     * 管理员分页查询用户列表
     *
     * @param pageRequest 分页参数
     * @param username    用户名（模糊查询，可为空）
     * @param role        角色（ROLE_USER/ROLE_ADMIN，可为空）
     * @param enabled     启用状态（可为空）
     * @return 用户列表分页数据
     */
    PageData<UserListItemVO> pageUsers(PageRequest pageRequest, String username, String role, Boolean enabled);

    /**
     * 更新用户启用状态
     *
     * @param userId  用户ID
     * @param enabled 启用状态
     */
    void updateUserStatus(Long userId, Boolean enabled);

    /**
     * 更新用户角色
     *
     * @param userId 用户ID
     * @param role   角色（ROLE_USER/ROLE_ADMIN）
     */
    void updateUserRole(Long userId, String role);
}

